package com.notifier.filter;

import com.notifier.event.ErrorEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
 * 错误过滤器链
 * 职责：按顺序执行所有过滤器
 *
 * @author Amadeus
 * @date 2025/10/14
 */
@Slf4j
@Component
public class ErrorFilterChain {
    
    @Autowired(required = false)
    private List<IErrorFilter> filters = new ArrayList<>();
    
    @PostConstruct
    public void init() {
        // 按 order 排序
        filters.sort(Comparator.comparingInt(IErrorFilter::getOrder));
        log.info("错误过滤器链初始化完成，共{}个过滤器：{}", 
            filters.size(), 
            filters.stream().map(IErrorFilter::getName).toArray());
    }
    
    /**
     * 执行过滤器链
     * 
     * @param event 错误事件
     * @return true-应该过滤掉，false-通过过滤器链
     */
    public boolean doFilter(ErrorEvent event) {
        for (IErrorFilter filter : filters) {
            try {
                if (filter.shouldFilter(event)) {
                    log.debug("错误事件被{}过滤", filter.getName());
                    return true;  // 被过滤
                }
            } catch (Exception e) {
                log.warn("过滤器{}执行异常，跳过", filter.getName(), e);
            }
        }
        return false;  // 通过所有过滤器
    }
}

